#ifndef NBODYSIMULATOR_H
#define NBODYSIMULATOR_H

// This class is what actually creates and runs the nBody simulation.
// The nBodyHolder class does most of the under the hood storage work
// and magically returns the acceleration. This class is responsible
// for doing the actual integration.

// Essentially, you throw all of the information (parameters, data, etc)
// at this class and press go.

#include "ParamHolder.h"
//#include "nBodyHolder.h"
#include "OctreeHolder.h"
#include "intCounter.h"
#include <sstream>

using namespace std;

class nBodySimulator
{
   public:
      // Initializes an nBodySimulation from a parameter file and an
      // initial setup file.
      nBodySimulator(string, string);

      // Run the simulation using the parameters in the parameter file.
      void run();

   private:
      ParamHolder* params;
      OctreeHolder* holder;

      double t;
      int OutputNumber;

      void advanceSim(double);
      int stepCounter;
};

#endif //NBODYSIMULATOR_H
